オペレータをシーン グラフ(Softimage シーン内のデータ ノードのセット)に接続するとき、そのオペレータには入力ポートと出力ポートの専用セットが必要です。 たとえば、Loft オペレータに接続できる有効な入力ポートは NURBS カーブのみです(ポイントやメッシュではありません)。 ConnectionSet は、ユーザが入力に指定しているグループを区切るために、特殊な文字列構文を使用します。
コネクション セットはセミコロン(;)で区切られたグループのリストを含む文字列表現で識別されます。 各グループ内にはカンマ(,)で区切られたオブジェクトまたはコンポーネントのリストがあります。 セットはグループまたはポート オブジェクトのどちらかで指定されます。
グループレベルのコネクション セットが高度なレベルの接続(暗示的)指定であるのに対し、ポートレベルのセット(明示的)はオペレータのポートに接続されている実際のオブジェクトを指定します。 つまり、グループレベルのコネクション セットでは、オブジェクトを受け付け、基本的なポート接続を自動的に解決できますが、ポートレベルの接続では、各ポートで正確なノード接続ポイントが指定されます。 たとえば、ラティス オペレータは以下のグループとポートを含むコネクション セットを取ります。
グループレベルとポートレベルでは、コネクション セットの構文が若干異なります。ポートレベルの場合は、コネクション セットで二重引用符内に角括弧([ および ])で囲んでポートレベルの接続を明示的に指定します。
ApplyOp コマンドは、グループレベルのコネクション セットのみをサポートしています。ポートレベルのコネクション セットを指定する場合は、ApplyOperator コマンドを使用してください。
たとえば、使用するポート接続を明示的に指定する場合は、以下のコネクション セットの文字列を使用します。
"[sphere.polymsh, sphere.kine.global, sphere.kine.global, , , sphere.polymsh; lattice.lattice, lattice.kine.global]"
... さらに、特定の接続を Softimage に解決させる場合は、以下のコネクション セットの文字列を使用することができます。
"sphere;lattice"
VBScript の例: グループレベルのコネクション セット
たとえばSIApplyFlexEnv など多くのエンベロープ コマンドは、グループレベルのコネクション セットを使用して、コネクション セットのメイン グループ内のエンベロープ オブジェクト、および 2 次グループ内のボーンおよびエフェクタを渡します。
' Build a simple Envelope with no picking required. CreatePrim "Sphere", "MeshSurface" Create2DSkeleton -0.019, 3.703, 0.000, -0.795, 0.000, 0.000, 0.000, 0.000, 1.000, 1 AppendBone , 0.000, -3.509, 0.000 SelectObj "sphere", , True SIApplyFlexEnv "sphere;bone,bone1,eff", False, False
コネクション セットはセミコロン(;)でメイン グループと 2 次グループに区切られ、各グループのメンバはカンマ(,)で区切られるため、sphere;bone,bone1,effの場合は最初のグループ('sphere')がエンベロープを表し、2 番目のグループ('bone,bone1,eff')がエンベロープ対象のアイテムを表します。
VBScript の例: ポートレベルのコネクション セット
Lattice(デフォーム)オペレータでは、ApplyOperator コマンドを使用した場合に、グループレベルのコネクション セットではなく、ポートレベルのコネクション セットを指定できます。 以下の例では、このオペレータを使用してラティスをプリミティブに接続した後にクラスタに接続する方法を示します。
GetPrimLattice(null, null, null, null, null); CreatePrim("Sphere", "MeshSurface", null, null); SelectGeometryComponents("sphere.pnt[9-29]"); CreateCluster(null); SelectGeometryComponents("lattice.pnt[(0,2,0),(0,2,1),(0,2,2),(0,2,3),(0,2,4),(0,3,0),(0,3,1),(0,3,2),(0,3,3),(0,3,4),(0,4,0),(0,4,1),(0,4,2),(0,4,3),(0,4,4),(1,2,0),(1,2,1),(1,2,2),(1,2,3),(1,2,4),(1,3,0),(1,3,1),(1,3,2),(1,3,3),(1,3,4),(1,4,0),(1,4,1),(1,4,2),(1,4,3),(1,4,4),(2,2,0),(2,2,1),(2,2,2),(2,2,3),(2,2,4),(2,3,0),(2,3,1),(2,3,2),(2,3,3),(2,3,4),(2,4,0),(2,4,1),(2,4,2),(2,4,3),(2,4,4),(3,2,0),(3,2,1),(3,2,2),(3,2,3),(3,2,4),(3,3,0),(3,3,1),(3,3,2),(3,3,3),(3,3,4),(3,4,0),(3,4,1),(3,4,2),(3,4,3),(3,4,4),(4,2,0),(4,2,1),(4,2,2),(4,2,3),(4,2,4),(4,3,0),(4,3,1),(4,3,2),(4,3,3),(4,3,4),(4,4,0),(4,4,1),(4,4,2),(4,4,3),(4,4,4)]"); Scale(null, 1, 0.222437137330754, 1, siRelative, siLocal, siObj, siXYZ, null, null, null, null, null, null, null, 0); Translate(null, 0, -1.17562305635889, 0, siRelative, siLocal, siObj, siXYZ, null, null, null, null, null, null, null, null, null, 0); SetValue("Context.constructionmode", siConstructionModeModelling); // This is the standard Group Level way of calling ApplyOp // It applies the lattice on the sphere point cluster ApplyOp("Lattice","sphere.polymsh.cls.Point;lattice"); // This does exactly the same thing, but you can specify each and every port you want to connect ApplyOperator("Lattice","[sphere.polymsh,sphere.kine.global,sphere.kine.global,sphere.polymsh.cls.Point,,sphere.polymsh;lattice.lattice,lattice.kine.global]"); // Set the ContructionHistory mode to Animation SetValue("Context.constructionmode", siConstructionModeAnimation); // It applies the lattice on the whole sphere, standard portgroup level ApplyOp("Lattice","sphere.polymsh.cls.Point;lattice"); // This does exactly the same thing, but you can specify each and every port you want to connect ApplyOperator("Lattice","[sphere.polymsh,sphere.kine.global,sphere.kine.global,sphere.polymsh.cls.Point,,;lattice.lattice,lattice.kine.global]");
すべてのオペレータの完全なリストおよびこれらのコネクション セットの詳細については、「オペレータ プリセット」を参照してください。
ConnectionSets および Dictionary オブジェクト
SDK では、各オペレータのコネクション セットに関する完全な情報が提供されています。 Script Editor で Dictionary オブジェクトに直接問い合わせ、各オペレータの完全な情報、またはファミリ名(siFamily)と一致するすべてのオペレータのリストを取得できます。
Application.LogMessage Dictionary.Info( "FlexibleEnvelope" ) ' Output: 'INFO : FlexibleEnvelope 'Families = Operators, DeformOperators 'Number Of Groups = 2 ' 'Group(0) 'Flags = E3DOPGROUP_MAIN 'Bounds = 1..1 'Filter = components for deforms 'Pick Prompt = Deformation Value ' 'Group(1) 'Flags =<undefined> 'Bounds = 1..N 'Filter = <undefined> 'Pick Prompt = Skeleton Object 'Pick Node 'Pick Branch ' '